1. 首页 > 新闻讯息

tools toolset

作者:admin 更新时间:2026-01-13
摘要:大家好,关于tools-freebsd卸载很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于linux的uboot启动映像,zImage和uImage的区别的知识点,相信应该可以解决大家的一些困惑和问题,,tools toolset

 

大家好,关于tools-freebsd卸载很多兄弟都还不太明白,不过没关系,由于今天小编就来为大家同享关于linux的uboot启动映像,zImage和uImage的不同差异的姿势点,相信应该可以化解大家的一些困惑和难题,如果碰巧可以化解无论兄弟们的难题,还望关注下本站哦,希望对各位有所帮助!

一、linux的uboot启动映像,zImage和uImage的不同差异

linux的uboot启动映像、zImage和uImage的不同差异

uboot启动zImage(go)和uImage(bootm)解析

1.bootm加载linux镜像是加载uIamge,uIamge是由mkimage制作而来,和zIamge的差异是uIamge是zIamge压缩过的,bootm需要先对uIamge解压,解压地址为内核入口地址。当解压完成时uIamge和zIamge几乎是相同的,具体差异可以论述。uboot目前只能支持uImage启动,不支持zImage启动

2.bootm解压经过

---------------------------------------------------------------------------

## Booting image at 08808000...

Image Name: Linux-2.6.14.7

Image Type: ARM Linux Kernel Image(uncompressed)

Data Size: 989172 Bytes= 966 kB

Load Address: 08008000

Entry Point:08008000

Verifying Checksum... OK

OK uboot bootm命令对uIamge的解压操作

---------------------------------------------------------------------------

Starting kernel...

传递内核参数将控制权交给arch\arm\boot\compressed]head.S

----------------------------------------------------------------------------

如mx1ADS班子内存的起始地址为0x0800_0000,通过tftp下载到0x0800_8000+offset,offset大于0x80_0000,即tftp 0x0880_8000接着bootm 0x0880_8000马上0x0880_8000处的uIamge解压,解压地址即为mkimage配置的kernel入口地址0x0800_8000。

zImage和uImage的不同差异一、vmlinuzvmlinuz是可引导的、压缩的内核。“vm”代表“Virtual Memory”。Linux支持虚拟内存,不像老的操作体系比如DOS有640KB内存的限制。Linux能够运用硬盘空间作为虚拟内存,因此得名“vm”。

vmlinuz的建立有两种方法。一是编译内核时通过“make zImage”创建,接着通过:“cp/usr/src/linux-2.4/arch/i386/linux/boot/zImage/boot/vmlinuz”产生。zImage适用于小内核的情况,它的存在是为了给后的兼容性。

二是内核编译时通过命令make bzImage创建,接着通过:“cp/usr/src/linux-2.4/arch/i386/linux/boot/bzImage/boot/vmlinuz”产生。bzImage是压缩的内核映像,需要注意,bzImage不是用bzip2压缩的,bzImage中的bz容易引起误解,bz表示“big zImage”。 bzImage中的b是“big”意思。 zImage(vmlinuz)和bzImage(vmlinuz)都是用gzip压缩的。它们不仅一个压缩文件,而且在这两个文件的开头部分内嵌有 gzip解压缩代码。因此你不能用gunzip或 gzip–dc解包vmlinuz。

二、 initrd-x.x.x.img

initrd是“initial ramdisk”的简写。initrd一般被用来临时的引导硬件到实际内核vmlinuz能够接管并继续引导的情形。

initrd映象文件是运用mkinitrd创建的。mkinitrd实用程序能够创建initrd映象文件。这个命令是RedHat专有的。其它Linux发行版或许有相应的命令。这是个很方便的实用程序。具体情况请看帮助:man mkinitrd下面的命令创建initrd映象文件。

最后生成的内核镜象有两种zImage以及uImage。其中zImage下载到目标板中后,可以直接用uboot的命令go来进行直接跳转。这时候内核直接解压启动。然而无法挂载文件体系,由于go命令没有将内核需要的相关的启动参数传递给内核。传递启动参数大家必须运用命令bootm来进行跳转。Bootm命令跳转只处理uImage的镜象。

uboot源代码的tools/目录下有mkimage工具,这个工具可以用来制作不压缩或者压缩的多种可启动映象文件。

mkimage在制作映象文件的时候,是在原来的可执行映象文件的前面加上壹个0x40字节的头,记录参数所指定的信息,这样uboot才能识别这个映象是针对何者CPU体系结构的,何者OS的,哪种类型,加载内存中的何者位置,入口点在内存的那个位置以及映象名是啥子

用法如下:

./mkimage-A arch-O os-T type-C comp-a addr-e ep-n name-d data_file[:data_file...] image

-A==> set architecture to'arch'

-O==> set operating system to'os'

-T==> set image type to'type'

-C==> set compression type'comp'

-a==> set load address to'addr'(hex)

-e==> set entry point to'ep'(hex)

-n==> set image name to'name'

-d==> use image data from'datafile'

-x==> set XIP(execute in place)

参数说明:

-A指定CPU的体系结构:

取值表示的体系结构

alpha Alpha

arm A RM

x86 Intel x86

ia64 IA64

mips MIPS

mips64 MIPS 64 Bit

ppc PowerPC

s390 IBM S390

sh SuperH

sparc SPARC

sparc64 SPARC 64 Bit

m68k MC68000

-O指定操作体系类型,可以取下面内容值:

openbsd、netbsd、freebsd、4_4bsd、linux、svr4、esix、solaris、irix、sco、dell、ncr、lynxos、vxworks、psos、qnx、u-boot、rtems、artos

-T指定映象类型,可以取下面内容值:

standalone、kernel、ramdisk、multi、firmware、script、filesystem

-C指定映象压缩方法,可以取下面内容值:

none不压缩

gzip用gzip的压缩方法

bzip2用bzip2的压缩方法

-a指定映象在内存中的加载地址,映象下载到内存中时,要按照用mkimage制作映象时,这个参数所指定的地址值来下载

-e指定映象运行的入口点地址,这个地址就是-a参数指定的值加上0x40(由于前面有个mkimage添加的0x40个字节的头)

-n指定映象名

-d指定制作映象的源文件

我在编译时用到的命令如下:

# make zImage//生成zImage镜象

#/usr/local/arm/k9uboot/tools/mkimage-n'Linux 2.4.27'-A arm-O linux-T

kernel-C none-a 0x20007fc0-e 0x20008000-d zImage uImage

内核镜象已经准备这个时候大家就要来准备文件体系了。由于时刻缘故,本人暂时采用的是其他人已经好的文件体系k9.img.gz。这个时候大家要做的是,自己写壹个简单hello.c的程序,编译通过后加入到该文件体系中,接着下载到目标板中运行。

先编写hello.c;

编译:

#/usr/local/arm/2.95.3/bin/arm-linux-gcc–o start-hello hello.c

编译后生成可执行文件start-hello

下面大家就必须把该执行文件加入到文件体系中去,流程如下:

#gunzip k9.img.gz//解压缩

#mount–o loop k9.img/mnt/new_disk//挂载

#cp start-hello/mnt/new_disk//将文件拷贝到文件体系中

#cd/mnt/new_disk

#umount/mnt/new_disk//卸载

#gzip–c–v9 k9.img> k9.img.gz//压缩生成最终的文件体系

下面大家就要下载内核以及准备好文件体系了,这边先说明我的内存分配情况如下:

Flash:

0x10000000――― 0x10020000 boot

0x10020000――― 0x10040000 uboot

0x10040000――― 0x10060000 uboot env

0x10060000――― 0x10200000 kernel

0x10200000――― 0x11000000 ramdisk

Sdram:

0x20007fc0――― 0x20a00000 kernel

0x20a00000―――ramdisk

Loadb通过串口下载数据到ram中

cp.b拷贝ram中的数据到flash中。

将kernel以及文件体系ramdisk下载完毕之后,大家还需要配置uboot的环境变量,这样uboot才能够在上电启动的时候启动内核等操作。环境变量配置如下:

Set cpfltoram cp.b 10200000 20a00000 18ffff//拷贝文件体系到ram中

Set boot bootm 20007fc0//启动kernel

Set bootcmd run cpfltoker\;run cpfltoram\;run boot//uboot复位的执行指令

Set cpfltoker cp.b 10060000 20007fc0 f4fff//拷贝内核到ram中

Set bootargs root=/dev/ram rw initrd=0x20a00000,4M init=/linuxrc console=ttyS0,11520

0,mem=32m//uboot传递给内核的启动参数

配置完毕后,saveenv把环境变量存储起来。

进修心得:zImage和uImage都是生成的可执行内核镜像文件

2者在u-boot中启动的方法分别是 go addr和 bootm addr来实现启动经过的

即对于zImage是通过 go来进行引导而uImage是通过bootm来进行引导的

zImage和 uImage 2者的关系是 uImage是zImage通过mkimage(u--boot下面tools下的工具)来生成的

结局是后者比前者在头部多了64个byte,这多余的64个byte是用来通知给u-boot用的;将相关信息告知u-boot;

这样做的结局在u-boot引导内核时存在2个地址:loadaddress和entry address 2者的差值刚好是0x40(64byte)的大致

这样在运用bootm loadaddress时u-boot会根据相应的loadaddress进行调整,有2中情况;

1)、当loadaddress和mkimage时传送的一致时:

那么在加载 ldr pc,entry address时,会选择mkinage时的entry地址;即pc=loadaddress+ 4;接着由pc来控制流程跳转倒ram中去执行;

2)、当loadaddress和mkimage时传送的不一致时:

u-bbot会进行地址相对后,将当前的loadaddress减去64byte后,将真正的内核映像(去掉64byte头部的内核)拷贝倒预先制定的loadaddress,接着直接从这个loadaddress来引导内核运行;

那么上面2中情况实际不同差异呢?其实就是最终代码执行时,如果地址和mkinage时指定的不符,那么u-boot将进行去头后,拷贝内核代码,直接执行;而如果不处理,则会将 loadaddress+0x40来执行内核;

通过tftp服务来下载 zImage或者uImage;

loadb在tftp不成功的情况下运用串口来下载内核希望不要用这个方式

cp【.b\.w\.l】完成内存之间内存给flash之间进行拷贝

最后可以配置 bootcmd环境变量可以实现 u-boot自动引导内核启动

至于文件体系的2中方法:ramdisk以及nfs主推开发者运用nfs方便修改;

当运用ramdisk时,

#gunzip k9.img.gz//解压缩

#mount–o loop k9.img/mnt/new_disk//挂载

#umount/mnt/new_disk//卸载

#gzip–c–v9 k9.img> k9.img.gz//压缩生成最终的文件体系

这四条命令不要忘记,对于你来说多么强大

不要你去再建立根文件体系。

二、怎样在CentOS中配置及配置Asterisk

怎样在CentOS中配置及配置Asterisk

Asterisk是第一套以放开源代码软件实作的用户交换机(PBX)体系。Asterisk由 Digium的创办人 Mark Spencer于 1999年间,他还在奥本大学念书时开发出。和其他的用户交换机体系相同,Asterisk同样支援电话拨打另一只分机,和拨打到公共交换电话网和IP电话体系。Asterisk这个名称源自于星号"*"。

Asterisk采用双轨授权玩法,不收费玩法运用 GNU General Public License(GPL)授权,而商用授权运用 proprietary玩法,此授权不需要将体系源代码公开。

体系一开始之开发平台为 Linux,目前已可在等于多种的平台上运行,其中包括 NetBSD, OpenBSD, FreeBSD, Mac OS X和 Solaris。亦有人将体系移植到 Microsoft Windows平台上,即为 AsteriskWin32。Asterisk是等于轻量级的体系,可以在如 OpenWrt之类的嵌入式体系上运作。

下面的内容将带大家怎样在CentOS中配置及配置Asterisk。

下面内容没有独特注明,全部操作都是在命令行中

[前期准备]配置依赖软件和环境

yum–y upgrade(更新软件列表和部分软件)

yum–y update(更新现有软件)

yum install kernel-devel(配置devel版的内核,asterisk配置需要)

yum install kernel-PAE-devel(IntelCPU的服务器上超过4G内存是需要用到)

yum install bison

yum install bison-devel

yum install ncurses

yum install ncurses-devel

yum install zlib

yum install zlib-devel

yum install openssl

yum install openssl-devel

yum install gnutls-devel

yum install gcc

yum install gcc-c++

yum install newt-devel

yum install curl

yum install curl-devel

yum install mysql-devel

以上软件的配置可以用下面内容命令一起配置

yum–y install kernel-devel kernel-PAE-devel bison bison-devel ncurses ncurses-devel zlib zlib-devel openssl openssl-devel gnutls-devel gcc gcc-c++ newt-devel curl curl-devel mysql-devel

reboot配置完这些软件需要重启一下

显示体系已经配置的组件,和可以配置的组件:

#yum grouplist如果体系配置之初采用最小化配置,没有配置xwindow,那么先配置:

#yum groupinstall"X Window System"

配置GNOME桌面环境 yum groupinstall"GNOME Desktop Environment"

配置KDE桌面环境 yum groupinstall"KDE(K Desktop Environment)"

卸载GNOME桌面环境

yum groupremove"GNOME Desktop Environment"

卸载KDE桌面环境 yum groupremove"KDE(K Desktop Environment

centos英文版下怎样配置中文语言包

centos配置经过中,配置语言包时选择了english,在配置完毕后浏览中文网页或查看中文文档时总是宣誓乱码,因此需要配置中文语言包,如果不能从配置盘进行配置,可以通过yum进行配置,配置办法为:

yum groupinstall<language>-support

在上面的命令中,<language>是下列其中一个: assamese, bengali, chinese, gujarati, hindi, japanese, kannada, korean, malayalam, marathi, oriya, punjabi, sinhala, tamil, thai,或 telegu。

VNC

xsetroot-solid grey

vncconfig-iconic&

#xterm-geometry 80×24+10+10-ls-title“$VNCDESKTOP Desktop”&

gnome-session&

startkde&

twm&

[准备所需软件]

Asterisk 1.4.26.2

Dahdi-linux-complete-2.2.0.2+2.2.0(包含dahdi-linux 2.2.0.2和dahdi-tools 2.2.0)

Libpri 1.4.10.1

Asterisk-addons 1.4.9

asterisk-sounds 1.2.1

[配置经过]

tar-xvzf libpri-1.4.10.1.tar.gz

tar-xvzf dahdi-linux-complete-current.tar.gz

tar-xvzf asterisk-1.4.26.2.tar.gz

tar-xvzf asterisk-addons-1.4.9.tar.gz

tar-xvzf asterisk-sounds-1.2.1.tar.gz

cd libpri-1.4.10.1

make&& make install

cd../dahdi-linux-complete-2.2.0.2+2.2.0

make all

make install

make config

cd../asterisk-1.4.26.2

./configure

make menuselect(编译选项选择)

make&& make install

make samples

make config

cd../asterisk-addons-1.4.9

cd cdr

修改cdr_addon_mysql.c,具体操作如下

输入命令”vi cdr_addon_mysql.c”

移动光标到开头的壹个空白行,按下键”i”

输入”#define MYSQL_LOGUNIQUEID”

按”esc”键,输入”:wq”回车

cd..

./configure

make menuselect

make&& make install

make samples

cd../asterisk-sounds-1.2.1

make&& make install

cd/etc/init.d/

./asterisk start

asterisk-r

Asterisk功能说明

Asterisk包含许多多昂贵的商用交换机体系才具有的功能,例如:语音信箱、多方语音会议、交互式语音应答(IVR)、电话选单和电话客服中心等机制。

管理者亦可透过 Asterisk内建的分机操作语言撰写拨号脚本以达到独特的功能目的。甚至可以透过 C语言撰写相容的模组,或以任何相容的语言借由 stdin和 stdout或网络 TCP socket开发Asterisk Gateway Interface(AGI)程式。

若要 Asterisk体系拨打至公共交换电话网或中继链接公共交换电话网,管理者必须配置适当的硬件。如由 Digium官方生产之各种 PCI接口卡,用以提供 Asterisk连接 T1、E1线路或其他传统线路之能力。中国大陆亦有如 OpenVox价格相对低廉之相容接口卡。

Asterisk支援特别广泛的影像和IP电话协定[4]。包括会话发起协议(SIP)、Media Gateway Control Protocol(MGCP)和 H.323协定。Asterisk可相容于大部分的 SIP电话。Inter-Asterisk eXchange(IAX2)协定一个由 Asterisk原生提供的 Asterisk PBX交换机间中继链接协定,部分 VoIP服务商甚至原生支援 IAX2协定。

为了满足传统电话和 IP电话混合的服务环境,Asterisk可以让管理者提议壹个最新单一的电话体系,或逐步的将既有电话体系转移运用新技术。部分的企业直接运用 Asterisk取代传统的交换机,而有些企业则运用 Asterisk提供进阶功能,如语音信箱等,或将长途电话透过 Asterisk改以网络传输以达到节费机制。

由于Asterisk过于专业且复杂,因此目前也存在大量衍生自Asterisk但简化过的通信体系,以让用户较容易运用。比如在欧美相对流行的elastix、trixbox、或以简体中文为基础的Freeiris等。